#ifndef _STR_LIST_
#define _STR_LIST_

#include "stdint.h"
#include "mytype.h"
#include "mem_buffer.h"

#ifdef __cplusplus
extern "C"
{
#endif

	typedef struct
	{
		int32_t len_max;
		int32_t len_now;
		const char **list;
		mem_fbuf_type *mem;
	} str_list_type;

	int32_t str_list_init(str_list_type *obj, const char **list, int32_t len_max, mem_fbuf_type *mem);
	int32_t str_list_add(str_list_type *obj, const char *str, char unique);
	int32_t str_list_del_at(str_list_type *obj, int32_t site);
	int32_t str_list_del(str_list_type *obj, const char *str);
	int32_t str_list_insert(str_list_type *obj, int32_t site, const char *str);

	typedef struct
	{
		str_list_type olist; 
		int32_t mem_len_limit;	   
	} str_mlist_type;

	int str_mlist_init(str_mlist_type *obj, int32_t len_limit, int32_t len_init, mem_fbuf_type *mem);
	int str_mlist_insert(str_mlist_type *obj, int32_t site, const char *str);
	int str_mlist_add(str_mlist_type *obj, const char *str, char unique);
	int str_mlist_free(str_mlist_type *obj);

	typedef struct
	{
		int32_t len_max;
		int32_t len_now;
		uint32_t* list;
		mem_mbuf_type *mem;
	} str_mbase_list_type;

	int32_t str_mbase_list_init(str_mbase_list_type* obj, uint32_t* list, int32_t len_max, mem_mbuf_type *mem);
	int32_t str_mbase_list_search(str_mbase_list_type* obj, const char* str);
	int32_t str_mbase_list_insert(str_mbase_list_type* obj, int32_t site, const char *str);
	int32_t str_mbase_list_add(str_mbase_list_type* obj, const char *str, char unique);
	int32_t str_mbase_list_del_at(str_mbase_list_type* obj, int32_t site);
	int32_t str_mbase_list_del(str_mbase_list_type* obj, const char* str);

	typedef struct
	{
		str_mbase_list_type olist; 
		int32_t mem_len_limit;	   
	} str_mbase_mlist_type;

	int str_mbase_mlist_init(str_mbase_mlist_type* obj, int32_t len_limit, int32_t len_init, mem_mbuf_type *mem);
	int str_mbase_mlist_insert(str_mbase_mlist_type* obj, int32_t site, const char *str);
	int str_mbase_mlist_add(str_mbase_mlist_type* obj, const char *str, char unique);
	int str_mbase_mlist_free(str_mbase_mlist_type* obj);

#ifdef __cplusplus
}
#endif

#endif 
